package com.ssy.lingxi.dataauth.builder;

import com.ssy.lingxi.dataauth.model.constant.DataAuthType;
import com.ssy.lingxi.dataauth.model.dto.ChannelAuthMemberDto;

import java.util.List;

/**
 * 复杂的Sql语句构造类（未完成）
 * @author 万宁
 * @version 2.0.0
 * @date 2021-04-09
 */
public class ComplexSelectBuilder extends AbstractSqlBuilder<ComplexSelectBuilder> implements ISelectMothod<ComplexSelectBuilder> {

    /**
     * 拦截类型
     */
    private DataAuthType dataAuthType;

    /**
     * 被拦截的原Sql语句
     */
    private String interceptedSql;

    /**
     * 构建后的实际执行的Sql语句
     */
    private String execSql;

    public ComplexSelectBuilder() {
        this.interceptedSql = "";
        this.execSql = "";
    }

    /**
     * 触发sql语句的构建（添加where条件）
     * @return 当前实例
     */
    @Override
    ComplexSelectBuilder buildSql() {
        return this;
    }

    /**
     * Debug输出构建后的sql语句
     *
     * @return 当前实例
     */
    @Override
    ComplexSelectBuilder showExecSql() {
        return this;
    }

    /**
     * 添加where语句的查询条件
     *
     * @param memberIdColName 会员Id字段名称
     * @param roleIdColName   角色Id字段名称
     * @param userIdColName   用户Id字段名称
     * @param userIds         用户Id列表
     * @param members         会员自身及下属渠道会员Id、角色Id列表
     * @return 要添加的where查询条件
     */
    @Override
    public ComplexSelectBuilder addWhere(String memberIdColName, String roleIdColName, String userIdColName, List<Long> userIds, List<ChannelAuthMemberDto> members) {
        return this;
    }

    /**
     * 传入被拦截的sql语句
     *
     * @param sql 被拦截的sql语句
     * @return 当前实例
     */
    @Override
    public ComplexSelectBuilder fromSql(String sql) {
        this.interceptedSql = sql;
        return this;
    }

    /**
     * 指定拦截类型
     *
     * @param dataAuthType 拦截类型枚举
     * @return 当前实例
     */
    @Override
    public ComplexSelectBuilder specifyType(DataAuthType dataAuthType) {
        this.dataAuthType = dataAuthType;
        return this;
    }

    /**
     * 指定要进行处理的表名
     *
     * @param dbTableName 要添加数据权限的表名
     * @return 当前实例
     */
    @Override
    public ComplexSelectBuilder specifyTable(String dbTableName) {
        return this;
    }

    /**
     * 指定要进行处理的Entity类
     *
     * @param entityClass xxx.class
     * @return 当前实例
     */
    @Override
    public ComplexSelectBuilder specifyTable(Class<?> entityClass) {
        return this;
    }

    /**
     * 返回要执行的sql语句
     *
     * @return 要执行的sql语句
     */
    @Override
    public String toSql() {
        return this.execSql;
    }
}
